//#include <stdio.h>
//#include <stdlib.h>

//int main(int argc, char *argv[], char *envp[]) 
//{
//    for (int i = 0; envp[i] != NULL; i++) 
//    {
//        printf("envp[%d]: %s\n", i, envp[i]);
//    }
//    return 0;
//}
//

//// 声明全局环境变量数组（C库提供）
//extern char** environ;
//
//int main() {
//    // 遍历所有环境变量并打印
//    for (int i = 0; environ[i] != NULL; i++) {
//        printf("env[%d]: %s\n", i, environ[i]);
//    }
//    return 0;
//}
//

//int main()
//{
//    printf("PATH=%s\n", getenv("PATH"));
//    return 0;
//}
//


//// main函数是有参数的
//int main(int argc, char * argv[])
//{
//    for(int i = 0; i < argc; i++)
//    {
//        printf("argv[%d]: %s\n",i ,argv[i]);
//    }
//    return 0;
//}
//


//#include <stdio.h>
//#include <unistd.h>
//#include <stdlib.h>
//
//int g_unval;
//int g_val = 100;
//int main(int argc, char *argv[], char *env[])
//{
//    const char *str = "helloworld";
//    printf("code addr: %p\n", main);
//    printf("init global addr: %p\n", &g_val);
//    printf("uninit global addr: %p\n", &g_unval);
//    static int test = 10;
//    char *heap_mem = (char*)malloc(10);
//    char *heap_mem1 = (char*)malloc(10);
//    char *heap_mem2 = (char*)malloc(10);
//    char *heap_mem3 = (char*)malloc(10);
//    printf("heap addr: %p\n", heap_mem); //heap_mem(0), &heap_mem(1)
//    printf("heap addr: %p\n", heap_mem1); //heap_mem(0), &heap_mem(1)
//    printf("heap addr: %p\n", heap_mem2); //heap_mem(0), &heap_mem(1)
//    printf("heap addr: %p\n", heap_mem3); //heap_mem(0), &heap_mem(1)
//    
//    printf("test static addr: %p\n", &test); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem1); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem2); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem3); //heap_mem(0), &heap_mem(1)
//    printf("read only string addr: %p\n", str);
//    
//    for(int i = 0 ;i < argc; i++)
//    {
//    	printf("argv[%d]: %p\n", i, argv[i]);
//    }
//    for(int i = 0; env[i]; i++)
//    {
//    	printf("env[%d]: %p\n", i, env[i]);
//    }
//	return 0;
//}


#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>

int g_val = 0;

int main()
{
    pid_t id = fork();
    if(id < 0)
    {
        perror("fork");
        return 0;
 	}
    
    else if(id == 0)   
    { 	
        //child
        while(1)
        {
            
	        printf("child[%d]: %d : %p\n", getpid(), g_val, &g_val);
            g_val++;
            sleep(1);
        }

    }
    
	else
    { 	
        //parent
        while(1)
        {

    	    printf("parent[%d]: %d : %p\n", getpid(), g_val, &g_val);
            sleep(1);
        }
	}
    
	sleep(1);
	return 0;	
}
